<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    
    <script>
        var reg = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
        var url = 'http://www.baidu.com:80/goood?1#fragment'
        var result = reg.exec(url);
        var names = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash']
        var blanks = ''
        var i;
        for (i = 0; i < names.length; i += 1) {
            console.log(names[i] + ':' + blanks.substring(names[i].length), result[i]);
        }
        // 一个匹配数字的正则表达式，数组可能由一个整数加上一个可选的负号，一个可选的小数部分和一个可选的指数部分组成
        var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
        //-?表示-出现1次或者0次
        // \d+表示数字出现1次或者多次
        // (?:\.\d*)？ 表示可选的非捕获组， 匹配.后面跟随数字出现0次或多次
        // (?:e[+\-]?\d+)? 表示可选非捕获组，会匹配一个e，一个可选的正负号，或多个数字
        // i 忽略大小写
        var test = function (num) {
            console.log(parse_number.test(num) + '\n' + num);
        }
        test('1');
        test('number');
        test('98.2');
        test('.96.23');
        test('-98563.36');
        test('-95-96');
        test('95-9');
        test('95.9E-98');
        var str = '122222221212222',
            reg = /1(2+)/;
        console.log(str.match(reg))
        reg=/1(?:2+)/
        console.log(str.match(reg))
        var reg=/(?=(\d{3}){1})/g,
        str='a222a1a2'
        console.log(12);
        console.log(str.match(reg));
    </script>
</body>

</html>